rune
The Rune Language, an embeddable dynamic programming language for Rust.
Contributing
If you want to help out, please have a look at Open Issues.
Highlights of Rune
- Runs a compact representation of the language on top of an efficient stack-based virtual machine.
- Clean Rust integration 💻.
- Memory safe through reference counting 📖.
- Awesome macros 📖.
- Template literals 📖.
- Try operators 📖.
- Pattern matching 📖.
- Structs and enums 📖 with associated data and functions.
- Dynamic vectors 📖, objects 📖, and tuples 📖 with out-of-the-box serde support 💻.
- First-class async support 📖.
- Generators 📖.
- Dynamic instance functions 📖.
- Stack isolation 📖 between function calls.
Rune scripts
You can run Rune programs with the bundled CLI:
cargo run --bin rune -- run scripts/hello_world.rn
If you want to see detailed diagnostics of your program while it's running, you can use:
cargo run --bin rune -- run scripts/hello_world.rn --dump-unit --trace --dump-vm
See --help
for more information.
Running scripts from Rust
You can find more examples in the
examples
folder.
The following is a complete example, including rich diagnostics using
termcolor
. It can be made much simpler if this is not needed.
use ;
use ;
use Arc;
let context = with_default_modules?;
let runtime = new;
let mut sources = new;
sources.insert;
let mut diagnostics = new;
let result = prepare
.with_context
.with_diagnostics
.build;
if !diagnostics.is_empty
let unit = result?;
let mut vm = new;
let output = vm.call?;
let output: i64 = from_value?;
println!;